﻿using SharpArch.Core.DomainModel;
using SharpArch.Core.PersistenceSupport;
using NHibernate.Validator.Constraints;
using SharpArch.Core;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
using System.Collections.Generic;
using System;

namespace zeus.Core
{
    public class Unidad : Entity
    {

        public Unidad()
        {
            UsuarioUnidades = new List<UsuarioUnidad>();
            UnidadEventos = new List<UnidadEvento>();
            Leyendas = new List<Leyenda>();
            Ubicaciones = new List<Ubicacion>(); 
        }

        [Required(ErrorMessage = "Ingrese  Alias")]
        [DisplayName("Alias")]
        public virtual string Nombre { get; set; }

        [Required(ErrorMessage = "Ingrese  Número de celular")]
        [DisplayName("Número de celular")]
        public virtual string Telefono { get; set; }

        [Required(ErrorMessage = "Seleccione Tipo de Unidad")]
        [DisplayName("Tipo de Unidad")]
        public virtual int CodigoDispositivo { get; set; }


        [Required(ErrorMessage = "Seleccione Accesorios")]
        [DisplayName("Accesorios")]
        public virtual int CodigoTerminal { get; set; }

        [Required(ErrorMessage = "Ingrese  Modelo del vehículo")]
        [DisplayName("Modelo del vehículo")]
        public virtual string Modelo { get; set; }

        [Required(ErrorMessage = "Ingrese  Color")]
        [DisplayName("Color")]
        public virtual string Color { get; set; }
               
        [DisplayName("Icono")]
        public virtual string Icono { get; set; }

        [Required(ErrorMessage = "Ingrese el Número")]
        [DisplayName("Número")]
        public virtual int? Numero { get; set; }

        [Required(ErrorMessage = "Ingrese la Marca")]
        [DisplayName("Marca")]
        public virtual string Marca { get; set; }

        [Required(ErrorMessage = "Ingrese la Placa")]
        [DisplayName("Placa")]
        public virtual string Placa { get; set; }
                
        [DisplayName("Mensaje")]
        public virtual string Mensaje { get; set; }

        [Required(ErrorMessage = "Ingrese notificación")]
        [DisplayName("Notificación Celular 1")]
        public virtual string Notificacion1 { get; set; }

        [DisplayName("Notificación Celular 2")]
        public virtual string Notificacion2 { get; set; }

        [DisplayName("Notificación Celular 3")]
        public virtual string Notificacion3 { get; set; }

        [DisplayName("Notificación Celular 4")]
        public virtual string Notificacion4 { get; set; }

        [DisplayName("Idioma")]
        public virtual int CodigoIdioma { get; set; }

        [DisplayName("Velocidad")]
        public virtual int Velocidad { get; set; }

        [DisplayName("Permitir comandos desde cualquier celular")]
        public virtual bool PermitirComando { get; set; }

        [DisplayName("Permitir requerir estado desde cualquier celular")]
        public virtual bool PermitirEstado { get; set; }

        public virtual int CodigoCliente { get; set; }


        public virtual string PalabraEmergencia { get; set; }
        public virtual string ImagenVehiculo { get; set; }
        public virtual string Compania { get; set; }

        public virtual string NombresDuenio { get; set; }
        public virtual string ApellidosDuenio { get; set; }
        public virtual string DireccionDomicilio { get; set; } 
        public virtual string Imei { get; set; }
        public virtual string SimOperadora { get; set; }
        public virtual string SimNumero { get; set; }
        public virtual string SimIP { get; set; }
        public virtual string NumeroChasis { get; set; }
        public virtual string NumeroMotor { get; set; }
        public virtual string Correo1 { get; set; }
        public virtual string Correo2 { get; set; }
        public virtual string Correo3 { get; set; }
        public virtual string Correo4 { get; set; }
        public virtual string TelefonoCasa { get; set; }
        public virtual string TelefonoOficina { get; set; }
        public virtual string TelefonoAlterno { get; set; }
        public virtual string FechaCreacion { get; set; }

        public virtual Dispositivo Dispositivo { get; set; }

        public virtual IList<UsuarioUnidad> UsuarioUnidades { get; set; }

        public virtual IList<UnidadEvento> UnidadEventos { get; set; }

        public virtual IList<Leyenda> Leyendas { get; set; }

        public virtual IList<Ubicacion> Ubicaciones { get; set; }
       

        // Helpers
        public virtual string UsuariosHidden { get; set; }
        public virtual string EventosHidden { get; set; }

        public virtual void AddUsuario(UsuarioUnidad usuarioUnidad)
        {
            if (usuarioUnidad.Unidad != null)
                usuarioUnidad.Unidad.UsuarioUnidades.Remove(usuarioUnidad);

            usuarioUnidad.Unidad = this;
            UsuarioUnidades.Add(usuarioUnidad);
        }

        public virtual void AddEvento(UnidadEvento unidadEvento)
        {
            if (unidadEvento.Unidad != null)
                unidadEvento.Unidad.UnidadEventos.Remove(unidadEvento);

            unidadEvento.Unidad = this;
            UnidadEventos.Add(unidadEvento);
        }

        public virtual void AddLeyenda(Leyenda leyenda)
        {
            if (leyenda.Unidad != null)
                leyenda.Unidad.Leyendas.Remove(leyenda);

            leyenda.Unidad = this;
            Leyendas.Add(leyenda);
        }

        public virtual void AddUbicacion(Ubicacion ubicacion)
        {
            if (ubicacion.Unidad != null)
                ubicacion.Unidad.Ubicaciones.Remove(ubicacion);

            ubicacion.Unidad = this;
            Ubicaciones.Add(ubicacion);
        }

    }
}
